package ar.uade.distribuidas.tpo.srv.dao;

import java.io.File;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.joda.time.LocalDate;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

import ar.uade.distribuidas.tpo.base.dominiodto.ClienteDTO;
import ar.uade.distribuidas.tpo.base.dominiodto.EstadoOC;
import ar.uade.distribuidas.tpo.base.dominiodto.ItemListaRodamientoDTO;
import ar.uade.distribuidas.tpo.base.dominiodto.ItemRemitoCPEDTO;
import ar.uade.distribuidas.tpo.base.dominiodto.OrdenDeCompraDTO;
import ar.uade.distribuidas.tpo.base.dominiodto.ProveedorDTO;
import ar.uade.distribuidas.tpo.base.dominiodto.RemitoCPEDTO;
import ar.uade.distribuidas.tpo.base.dominiodto.RodamientoDTO;
import ar.uade.distribuidas.tpo.srv.delegado.BD;

public class OrdenDeCompraSaverXMLDAO {
	private static OrdenDeCompraSaverXMLDAO instancia;
	// private static String ARCHIVO = "remitocpe.xml";
	//private static Document doc;
	BD bd = BD.getInstance();

	public static OrdenDeCompraSaverXMLDAO getInstancia() {
		if (instancia == null) {
			instancia = new OrdenDeCompraSaverXMLDAO();
			//instancia.createDocument(filecontent);
		}
		return instancia;
	}
/*
	private void createDocument(InputStream nombreArchivo) {
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		DocumentBuilder builder;
		try {
			builder = factory.newDocumentBuilder();
			doc = builder.parse(nombreArchivo);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
*/
	private OrdenDeCompraSaverXMLDAO() {
		super();

	}

	public OrdenDeCompraDTO mapStock(Document docu) {
		Element eleRemitoCpe = (Element) docu
				.getElementsByTagName("OrdenCompra").item(0);
		OrdenDeCompraDTO rcpe = new OrdenDeCompraDTO();
		rcpe.setNumero(Integer.parseInt(eleRemitoCpe.getAttribute("numero")));
		rcpe.setEstado(EstadoOC.AROBADA); // Ya viene aprobada
		try {

			try {
				//DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-mm-dd");
				//LocalDate date = formatter.parseLocalDate(eleRemitoCpe
					//	.getElementsByTagName("Emision").item(0).getTextContent());
				String date = eleRemitoCpe.getElementsByTagName("Emision").item(0).getTextContent();
				rcpe.setFecha(date);
			} catch (Exception e) {
				rcpe.setFecha("2014-07-07");
			}

			Long cuil = ((Long.parseLong(eleRemitoCpe
					.getElementsByTagName("Cuil").item(0).getTextContent())));
			// prov.setNombre(elemProv.getAttribute("RazonSocial")); No hace
			// falta
			// ya que sacamos el proveedor de la DB

			ProveedorDTO pr = null;

			pr = bd.getProveedor(cuil);

			rcpe.setProveedor(pr);

			Element ordencompras = (Element) eleRemitoCpe
					.getElementsByTagName("Rodamientos").item(0);
			int cant;
			ItemListaRodamientoDTO itemLista;
				if (ordencompras.getNodeType() == Node.ELEMENT_NODE) {
					
					NodeList items = ordencompras.getElementsByTagName("Item");
					List<ItemListaRodamientoDTO> itemsRem = new ArrayList<ItemListaRodamientoDTO>();

					for (int j = 0; j < items.getLength(); j++) {
						Node item = items.item(j);

						if (item.getNodeType() == Node.ELEMENT_NODE) {
							Element it = (Element) item;
							
							

							RodamientoDTO rod = new RodamientoDTO(
									Long.parseLong(it.getAttribute("serie")),
									getValue("Sufijo", it), getValue("Marca",
											it), getValue("Origen", it));

							RodamientoDTO rodT = bd.getRodamiento(rod);
							if (rodT != null){
								itemLista = new ItemListaRodamientoDTO();
								cant = Integer.parseInt(it.getElementsByTagName("Cantidad").item(0).getTextContent());
								itemLista.setCantidad(cant);
								itemLista.setRodamiento(rodT);	
								itemsRem.add(itemLista);
							
							}
						}
					}
					rcpe.setItem(itemsRem);
				}
			
		} catch (Exception e) {
			e.printStackTrace();
		}

		return rcpe;
	}

	private static String getValue(String tag, Element element) {
		NodeList nodes = element.getElementsByTagName(tag).item(0)
				.getChildNodes();
		Node node = (Node) nodes.item(0);
		if (node != null) {
			return node.getNodeValue();
		}
		return "";
	}

	public static void main(String[] args) {// C:\\Users\\Maxi\\Workspace2\\rodamientos-web\\
		
	}
}